package com.epalmpay.controller.manage.message;

import java.util.List;

import javax.annotation.Resource;

import com.epalmpay.dto.system.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.epalmpay.commom.BaseController;
import com.epalmpay.exception.ApplicationException;
import com.epalmpay.status.Rescode;
import com.epalmpay.dto.messsage.SysMessageInDTO;
import com.epalmpay.dto.messsage.TerminalMessageInDTO;
import com.epalmpay.dto.messsage.TerminalMessageListOutDTO;
import com.epalmpay.dto.messsage.TerminalMessageOutDTO;
import com.epalmpay.dto.terminalmanage.DeviceAddInDTO;
import com.epalmpay.entity.DevicePos;
import com.epalmpay.entity.Page;
import com.epalmpay.entity.SysMessageBase;
import com.epalmpay.service.device.IDeviceService;
import com.epalmpay.service.message.IMessageService;
import com.epalmpay.service.operator.ISysLogService;
import com.epalmpay.util.Tools;

/**
 * Created by wucongpeng on 2017/6/2.
 */
@Controller
@RequestMapping("/manager/message")
public class TerminalMessageController extends BaseController {


    @Resource
    private IMessageService messageService;

    @Resource
    private IDeviceService deviceService;
    
    @Resource
    private ISysLogService sysLogService;

    @RequestMapping("/listTerminalMessage")
    @ResponseBody
    public TerminalMessageListOutDTO listTerminalMessage(TerminalMessageInDTO terminalMessageInDTO, PageDTO pageDTO) {
        TerminalMessageListOutDTO terminalMessageListOutDTO = new TerminalMessageListOutDTO();
        try {
            Page page = Tools.pageEmtity(pageDTO);

            List<TerminalMessageOutDTO> messageOutDTOList = messageService.listTerminalMessage(terminalMessageInDTO, page);

            terminalMessageListOutDTO.setTerminalMessageOutDTOList(messageOutDTOList);
            terminalMessageListOutDTO.setPage(page);
            terminalMessageListOutDTO.setErrorCode(Rescode.SUCCESS, "处理成功");
            return terminalMessageListOutDTO;
        }catch (ApplicationException ae) {
            terminalMessageListOutDTO.setErrorCode(ae.errCode, ae.errMsg);
            ae.printStackTrace();
        } catch (Exception e) {
            terminalMessageListOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "处理出现异常");
            e.printStackTrace();

        }

        return terminalMessageListOutDTO;
    }


    @RequestMapping("/getSysMessageBaseList")
    @ResponseBody
    public List<SysMessageBase> getSysMessageBaseList(@RequestBody SysMessageInDTO sysMessageInDTO) throws Exception {
        return messageService.getSysMessageList(sysMessageInDTO);
    }

    @RequestMapping("/getuserId")
    @ResponseBody
    public UserListOutDTO getuserId(UserInDTO userInDTO) {
        UserListOutDTO userListOutDTO = new UserListOutDTO();
        try {

            UserOutDTO userOutDTO = messageService.getuserId(userInDTO);

            userListOutDTO.setUserOutDTO(userOutDTO);
            userListOutDTO.setErrorCode(Rescode.SUCCESS, "处理成功");
            return userListOutDTO;
        }catch (ApplicationException ae) {
            userListOutDTO.setErrorCode(ae.errCode, ae.errMsg);
            ae.printStackTrace();
        } catch (Exception e) {
            userListOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "处理出现异常");
            e.printStackTrace();
        }

        return userListOutDTO;
    }


    /**
     * 获取设备详情
     * @param terminalMessageInDTO
     * @return
     */
    @RequestMapping("/terminalMessageDetail")
    @ResponseBody
    public TerminalMessageOutDTO terminalMessageDetail(@RequestBody TerminalMessageInDTO terminalMessageInDTO){
            TerminalMessageOutDTO terminalMessageOutDTO = new TerminalMessageOutDTO();
        try {
            terminalMessageOutDTO = messageService.getTerminalMessageDetail(terminalMessageInDTO);
            terminalMessageOutDTO.setErrorCode(Rescode.SUCCESS, "处理成功");
            return terminalMessageOutDTO;
        } catch (Exception e) {
            terminalMessageOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "处理出现异常");
            e.printStackTrace();
        }

        return terminalMessageOutDTO;
    }


    /**
     * 更新维修状态
     * @param terminalMessageInDTO
     * @return
     * @throws Exception 
     */
    @RequestMapping("/updatePosRepairStatus")
    @ResponseBody
    public BaseOutDTO updatePosRepairStatus(@RequestBody TerminalMessageInDTO terminalMessageInDTO) throws Exception {
        BaseOutDTO baseOutDTO = new BaseOutDTO();

        int i = messageService.updatePosRepairStatus(terminalMessageInDTO);
        if(i > 0) {
            baseOutDTO.setErrorCode(Rescode.SUCCESS);
        	String content ="更新pos维修状态";
			sysLogService.addSysLog(terminalMessageInDTO.getUserId(),terminalMessageInDTO.getUserName(),null,content,terminalMessageInDTO.getGroupId());
            
            
        } else {
            baseOutDTO.setErrorCode(Rescode.FAIL);
        }
        return baseOutDTO;
    }


    /**
     * 更换POS机的页面信息
     * @param terminalMessageInDTO
     * @return
     */
    @RequestMapping(value = "/replacePos")
    @ResponseBody
    public TerminalMessageOutDTO replacePos(@RequestBody TerminalMessageInDTO terminalMessageInDTO){
        TerminalMessageOutDTO terminalMessageOutDTO = new TerminalMessageOutDTO();

        try {
            terminalMessageOutDTO = messageService.getOldPosInfo(terminalMessageInDTO);
            terminalMessageOutDTO.setErrorCode(Rescode.SUCCESS, "处理成功");
            return terminalMessageOutDTO;
        } catch (Exception e) {
            terminalMessageOutDTO.setErrorCode(Rescode.DEFAULT_PREFIX, "处理出现异常");
            e.printStackTrace();
        }
        return terminalMessageOutDTO;
    }

    /**
     * 插入新POS数据
     *
     * @param deviceAddInDTO
     * @return
     */
    @RequestMapping(value = "/addPos")
    @ResponseBody
    public DevicePos addDevicePosInfo(@RequestBody DeviceAddInDTO deviceAddInDTO) throws Exception {
        return deviceService.addDevicePosInfo(deviceAddInDTO);
    }
}
